package Regex;

public class RegexDemo4 {
    public static void main(String[] args) {

        /*


        正则表达式练习：需求请编写正则表达式验证用户名是否满足要求。
        要求：大小写字母，数字，下划线一共4-16位请编写正则表达式验证身份证号码是否满足要求。
        简单要求：18位，前17位任意数字，最后一位可以是数字可以是大写或小写的X
        复杂要求：按照身份证号码的格式严格要求。
        身份证号码：41080119930228457X
                  510801197609022309
                  15040119810705387X
                  130133197204039024
                  430102197606046442


         */

        //用户名要求:大小写字母，数字，下划线一共4-16位
        String regex1 = "\\w{4,16}";
        System.out.println("zhangsan".matches(regex1));
        System.out.println("$123".matches(regex1));
        System.out.println("-----------------------");

        //身份证号码的简单校验：
        //18位，前17位任意数字，最后一位可以是数字可以是大写或小写的X
        String regex2 = "[1-9]\\d{16}[Xx\\d]";
        System.out.println("41080119930228457X".matches(regex2));
        System.out.println("510801197609022309".matches(regex2));
        System.out.println("15040119810705387X".matches(regex2));
        System.out.println("130133197204039024".matches(regex2));
        System.out.println("430102197606046442".matches(regex2));
        System.out.println("-----------------------");

        //忽略大小写的的书写方式
        //在匹配的时候忽略abc的大小写
        String regex3 = "(?i)abc";
        System.out.println("abC".matches(regex3));
        System.out.println("Abc".matches(regex3));
        System.out.println("ABC".matches(regex3));

        //身份证号码的严格校验
        //410801 1993 02 28 457×
        // 前面6位：省份，市区，派出所等信息第一位不能是0，后面5位是任意数字
        // 年的前半段：181920
        // 年的后半段：任意数字出现两次
        // 月份：01 ~ 09 10 11 12
        // 日期：01 ~ 31
        // 后面四位：任意数字出现3次最后一位可以是数字也可以是大写X或者小写x

        String regex4 = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|10|11|12)(0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]";
        System.out.println("41080119930228457X".matches(regex4));
        System.out.println("510801197609022309".matches(regex4));
        System.out.println("15040119810705387X".matches(regex4));
        System.out.println("130133197204039024".matches(regex4));
        System.out.println("430102197604166442".matches(regex4));
        System.out.println("-----------------------");

    }
}
